package com.xhj.mybatis.executor.result;

import com.xhj.mybatis.session.ResultContext;

/**
 * DefaultResultContext
 *
 * @author XJks
 * @description DefaultResultContext 实现了 ResultContext 接口，用于在遍历查询结果时保存当前结果对象、结果数量和停止标志。
 */
public class DefaultResultContext<T> implements ResultContext<T> {

    /**
     * 当前处理的结果对象
     */
    private T resultObject;

    /**
     * 已处理的结果数量
     */
    private int resultCount;

    /**
     * 是否已停止处理结果的标志
     */
    private boolean stopped;

    /**
     * 构造方法，初始化成员变量。
     */
    public DefaultResultContext() {
        resultObject = null;
        resultCount = 0;
        stopped = false;
    }

    @Override
    public T getResultObject() {
        return resultObject;
    }

    @Override
    public int getResultCount() {
        return resultCount;
    }

    @Override
    public boolean isStopped() {
        return stopped;
    }

    /**
     * 处理下一个结果对象时调用，更新当前结果对象并递增结果数量。
     *
     * @param resultObject 新的结果对象
     */
    public void nextResultObject(T resultObject) {
        // 结果数量加 1
        resultCount++;
        // 更新当前结果对象
        this.resultObject = resultObject;
    }

    @Override
    public void stop() {
        // 设置停止标志
        this.stopped = true;
    }

}
